#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=3005;
const int maxm=3e4+5;
ll val[maxn],ans;
int T,n,m,pr[maxm*2],d[10],x[maxn],y[maxn];
inline int z(int x)
{
    if(x<0) return -x;
    return x;
}
vector<pair<int, int> > vec[maxm*2];
bitset<3005> pre[maxn],suf[maxn];
inline void ins(int x,int y)
{
    pre[x][y]=pre[y][x]=1;
}
inline void del(int x,int y)
{
    suf[x][y]=suf[y][x]=0;
}
int main()
{
    freopen("chess.in","r",stdin);
    freopen("chess.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    for(int i=2;i<=60000;i++) pr[i]=1;
    for(int i=2;i<=60000;i++)
        for(int j=2;i*j<=60000;j++) pr[i*j]=0;
    cin>>T;
    while(T--)
    {
        ans=0;
        cin>>n>>m;
        for(int i=1;i<=n;i++) cin>>x[i]>>y[i];
        for(int i=1;i<=n;i++) cin>>val[i];
        if(n<=100)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=i+1;j<=n;j++)
                {
                    for(int k=j+1;k<=n;k++)
                    {
                        d[1]=z(x[i]-x[j])+z(y[i]-y[j]);
                        d[2]=z(x[i]-x[k])+z(y[i]-y[k]);
                        d[3]=z(x[k]-x[j])+z(y[k]-y[j]);
                        sort(d+1,d+1+3);
                        if(pr[d[2]]==1 && (d[2]%20==3 || d[2]<=10)) ans+=val[i]+val[j]+val[k];
                    }
                }
            }
            cout<<ans<<'\n';
            continue;
        }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++) suf[i][j]=(i!=j),pre[i][j]=0;
        for(int i=1;i<=n;i++)
            for(int j=i+1;j<=n;j++)
                vec[z(x[i]-x[j])+z(y[i]-y[j])].push_back(make_pair(i,j));
        for(int i=0;i<=2*m;i++)
        {
            for(int j=0;j<vec[i].size();j++) ins(vec[i][j].first,vec[i][j].second);
            for(int j=0;j<vec[i].size();j++)
            {
                del(vec[i][j].first,vec[i][j].second);
                if(pr[i]==1 && (i%20==3 || i<=10))
                    ans+=((pre[vec[i][j].first]&suf[vec[i][j].second])|(pre[vec[i][j].second]&suf[vec[i][j].first])).count();
            }
        }
        cout<<3*ans<<'\n';
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++) suf[i][j]=pre[i][j]=0;
        for(int i=0;i<=2*m;i++) vec[i].clear();
    }
    return 0;
}
